import axios from "axios";
import { Message } from 'element-ui';
import ResultUtil from '@/utils/ResultUtil'
// 引入进度条
import nprogress from "nprogress";
// 引入进度条样式  如果要修改进度条的颜色，直接在nprogress.css修改bar
import "nprogress/nprogress.css"
import router from "@/router";
// start：进度条开始  done：进度条结束

axios.defaults.withCredentials = true;//如果没有配置为true，默认为false则向后台发送的请求当中不携带cookie信息，如此每一次sessionID自然会不同

const requests = axios.create({// 配置对象
    baseURL:window.SITE_CONFIG.apiURL, // 基础路径，发请求的时候
    timeout:50000,   // 代表请求超时的时间50s
});

requests.interceptors.request.use((config)=>{
    nprogress.start();
    return config;
});

requests.interceptors.response.use((res)=>{
    //res：实质就是项目中发请求，服务器返回的数据
    //成功的回调函数：服务器响应数据回来以后，响应拦截器可以检测到，可以做一些事情
    nprogress.done();
    let data = res.data;
    if(ResultUtil.isSuccess(data)){
        return data;
    }else{//这里要弹框
        let code = data.code;
        if(code == 401){//用户未登录  token过期  token失效  token校验错误
            const redirectUrl = router.currentRoute.fullPath;
            router.push(`/user/login?redirectUrl=${redirectUrl}`);
        }else if(code == 403){
            Message({
                message: "您没有权限",
                type: 'error',
                duration:5000,
                showClose:true,
                center:true
            });
        }else {
            Message({
                message: data.msg,
                type: 'error',
                duration:5000,
                showClose:true,
                center:true
            });
        }
        return data;
    }
},(error)=>{
    console.log("请求失败--：",error);
    let status = error.response.status;
    if(status == 403){
        Message({
            message: "您没有权限",
            type: 'error',
            duration:5000,
            showClose:true,
            center:true
        });
    }else{
        Message({
            message: error.message,
            type: 'error',
            duration:5000,
            showClose:true,
            center:true
        });
    }
});

export default requests;
